package com.baizhi.service.impl;

import com.baizhi.dao.CmfzGuruDao;
import com.baizhi.entity.CmfzGuru;
import com.baizhi.service.CmfzGuruService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class CmfzGuruServiceImpl implements CmfzGuruService {
    @Autowired
    private CmfzGuruDao cmfzGuruDao;
    @Override
    @Transactional(readOnly = true)
    public Page<CmfzGuru> selectPage(Integer page, Integer limit, String guruNickname) {
        Page<CmfzGuru> cmfzGuruPage = null;
        //装配分页对象数据
        Page<CmfzGuru> guruPage = new Page<>(page,limit);
        if(guruNickname!=null){
            //此时需要条件查询   需要构造查询条件对象
            QueryWrapper<CmfzGuru> queryWrapper = new QueryWrapper<>();
            queryWrapper.like("guru_nickname",guruNickname);
            //调用分页查询方法
            cmfzGuruPage = cmfzGuruDao.selectPage(guruPage, queryWrapper);
        }else {
            cmfzGuruPage = cmfzGuruDao.selectPage(guruPage, null);
        }

        /*
        * 上面是查询数据库获取上师数据   这里要进行授权 只有拥有查询上师权限的管理员才能查询
        * 这里采用的是代码式授权
        * */
        //首先，根据shiro的工具类 获取主体subject对象
        Subject subject = SecurityUtils.getSubject();
        //然后，调用isPermitted()方法  参数是权限字符串   进行权限授权
        // 还可以subject.hasRole("admin");  进行角色授权  参数是角色名称
        boolean permitted = subject.isPermitted("guru:show");
        if(permitted){
            return cmfzGuruPage;
        }else {
            return null;
        }
    }

    @Override
    public void insertCmfzGuru(CmfzGuru cmfzGuru) {
        //这里对上师的添加操作 进行角色授权  superadmin超级管理员才能添加操作
        boolean role = SecurityUtils.getSubject().hasRole("superadmin");
        if(role){
            cmfzGuruDao.insert(cmfzGuru);
        }
    }

    @Override
    public void updateCmfzGuru(Integer guruId) {
        //首先，要获取要冻结的上师对象
        CmfzGuru cmfzGuru = cmfzGuruDao.selectById(guruId);
        //然后，将修改其状态
        if(cmfzGuru.getGuruStatus()==0){
            cmfzGuru.setGuruStatus(1);
        }else {
            cmfzGuru.setGuruStatus(0);
        }
        //最后，执行更新方法
        cmfzGuruDao.updateById(cmfzGuru);
    }

    @Override
    public List<CmfzGuru> selectAll() {
        return cmfzGuruDao.selectList(null);
    }
}
